热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

作者:SIMON KUTTRUF

翻译:笪洁琼

校对:冯羽

本文4200字,建议阅读14分钟

本文将基于机器学习运用Python对欧洲碳排放证书市场建立算法交易框架。


前言


人工智能的新突破每天都成为头条新闻。在金融领域,机器学习的广泛运用和强大的应用,客户们并不了解。事实上,很少有像金融行业那样具有深厚历史、清楚明了和结构化数据的领域——这使得它成为了“学习机器”的一个早期标志,在这个领域取得了巨大的成功,而且还在继续。


大约三年前,我参与了为能源市场的价格预测和算法交易开发机器学习(ML)模型,特别是在欧洲的碳排放证书市场。在这篇文章中,我想要分享一些我在我的ML项目中发现的相关知识、方法和见解。


的重点不是在技术细节上,而是在模型选择背后的一般考虑因素,在经典的学术教科书或新技术的在线教程中很少讨论。


在算法交易的例子中,我展示了一些“交易技巧”,你可能会发现,当你把机器学习应用到现实生活中的环境中,比如一个孤独的求知者或者你的同事们,可能会觉得这是有用的。


能源交易市场


欧洲碳排放证书(EU ETS)的市场是在2005年京都议定书之后确立的,作为欧盟气候政策的一个重要支柱,通过一项“总量控制和贸易”计划对欧洲约一半的人为二氧化碳排放进行监管。这一机制为各国***提供了控制温室气体排放总量的控制(“上限”),同时承认了对市场力量(“交易”)的排放权的有效分配。其基本理念是对污染定价:该计划所涵盖的每一个工业设施都必须被监测并报告其温室气体排放的确切数量,然后通过交付配额来抵消各自的排放量(以吨为单位)。


这些“污染权”被拍卖或免费发放给工业企业,然后可以在场外交易或在中间市场上进行交易,以便按需求和供应灵活定价。


由于环境政策的减排目标限制了每年的总供应量,一些污染者不得不选择减少污染的措施(“减排”),比如在烟囱里安装额外的过滤器。这些污染者的边际减排成本低于目前许可证的市场价格(例如,由于他们的特定的过滤设备很便宜),他们可以将多余的污染配额出售给那些面临更高边际减排成本的污染者,并获取利润。


在一个完全有效的排放交易市场中,许可证的均衡价格将以最终减排单位的边际减排成本为基础,以满足限额供应上限设定的总体减排目标。


独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)


考虑到具体行业的减排成本的不确定性,该工具允许***控制排放总量,而排放许可证的实际价格则根据需求方市场力量的变化而波动,包括:


  • 市场对未来政策变化的预期

  • 即将举行的拍卖许可证的规模、价格和持续拍卖的覆盖比率(见图1)

  • 市场参与者的投机

  • 银行行为(一年内发放的许可证在同一政策阶段的所有年份都有效)

  • 其他能源商品的价格关系


为了举例说明后者,假设每个热量单位的天然气价格低于布伦特原油的价格。


电力生产商和公用事业公司将转而使用这种更少碳的燃料,从而降低了对碳排放的需求。


因此,在这些时期,配额的价格也会下降(见图2)。


独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

图1:下午2点的高覆盖拍卖的看涨信号,很快打破了一个看跌的趋势


独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

图2:2017年欧盟与英国天然气的标准30日(绝对和标准化)

 

一个全面的模型需要反映所有这些因素。虽然我们可以安全地假定模式中观察到丰富的历史市场数据延续到现在,并将持续到未来(这是必要条件,不可或缺的假设,对于任何分析模型),很明显,这个设置,对于任何试图建立基于通用市场信念、基于经济物理学基本的关系或状态空间概念的模型,都过于复杂。


机器学习的应用


所以这是一个用来释放机器学习力量的案例。如何利用机器学习呢?


下面是一个使用监督学习的交易系统的典型工作流程图:


独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)


1.获取数据


财务时间序列的良好来源是你想要交易的交易所的API,AlphaVantage或Quandl的API。


数据的规模至少应该和你想要建模并最终预测的规模相同。你的预测范围是什么?


长期的范围将需要额外的输入因素,比如市场公告、政策前景,基于twitter关联数据的情绪分析等等。如果你在短期的游戏,甚至基于纯市场信号的高频交易数据,您可能想要包括各种长度的平均值为模型提供历史背景和趋势,特别是如果你的学习算法没有像周期性神经网络或LSTMs那样的显式记忆单元。


技术分析中使用的所有常见的指标(如相对强弱指数(RSI),平均趋向指标(ADX),布林线(Bollinger Bands),MACD(平滑异同移动平均线))是基于某种数量(价格、成交量)的移动平均线——即使你不相信简单的交易规则,该模型将帮助并反映了大多数市场参与者包括他们的交易行为。


您的计算能力可能是一个限制因素,特别是在您的ML模型将与硬编码、快速且独特的市场制造或套利者的算法相抗衡的情况下。


部署专门的云服务器或像H2O和TensorFlow这样的ML平台,可以让您在不同的服务器上进行计算。


清理数据(你如何插补空白?),绘制它,同它一起玩耍——你已经发现了交易机会,趋势,异常吗?


2. 监督模型训练


将您的数据划分为训练、验证(用于参数调优、特征选择等)和测试的补充集。这实际上比听起来要复杂得多:最理想的情况是,测试集应该尽可能地与当前的市场状态“相似”,验证和测试集应该遵循相同的分布。


否则,您可能会浪费精力在验证集上调整模型参数,结果却发现它对测试集的泛化是很糟糕的。遵循“市场机制”的概念,也就是在特定的商品组合中,特定组合商品的延长期支配着你的目标工具价格动态——有必要首先有一个聚类算法的无监督学习发现定义相关性数据,然后评估属于同一集群的验证集和测试集的模型性能(参见图3——在这个项目中,集群使得预测性能提高了8%)。


独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

图3按照聚类算法(彩色部分是EUA结算价格)确定的一致市场周期


在早期,决定并建立一个单一的评价指标。追逐太多不同的指标只会导致混乱。


在算法交易的正文中,一个合适的衡量标准是“利润和损失”(PnL),因为它用实际的动荡大小(“相关性”)对分类精度(价格上升/下降)进行加权。它符合您可能考虑的交易策略的度量标准。观察训练和验证集的模型性能,如果训练集上的错误,即“模型偏差”,是很高的,你可能需要允许更多的模型参数(例如在深度学习模型中增加更多的层/神经元)。


如果模型缺乏泛化(“训练集的模型过度拟合),也就是验证集和训练集上的性能差异(“模型方差”)很高,你可能需要添加更多的数据训练集,减少最相关的特性,添加正则化(如L2,L1或中止)或早期停止(在梯度下降优化)。仔细检查模型出错的情况将有助于识别任何潜在的和可避免的模型偏差,参见图4。


独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

图4错误分析——价格变动与预测信心(大于0.5:上升,<0.5:下降)


建立你的目标表现:对于市场预测,75%的分类精度实际上是相当不错的——比随机预测要好50%(50%的精度)。这个基线与其他ML应用程序非常不同,比如对象或语音识别,它们在一个封闭的环境中运行,其中影响建模目标的因素可以清楚地识别出来(图像像素的RGB通道,声音样本的波频率)。


3. 交易策略


定义你的交易策略:一套根据模型输出定义具体交易内涵的规则:如根据一个给定预测的模型置信度的阈值,设置你在市场上的头寸,头寸的大小,以及在给定的市场状态下,你持有一个头寸的时间。策略通常会附带一些需要优化的***参数(下一步)。


在本文讨论的监督学习的背景下,这是一个相当于手动基于反向测试和网格搜索的过程(下面列出了一些缺点)。


4. 回溯测试&最优化


现在,我们可以看到这些数字——你的交易系统,或者预测模型和给定的交易策略之间的相互作用,在一套完整的历史市场数据上表现如何?


在这里,步骤2(模型训练)中使用的测试集可以成为调优策略参数的验证集。


遗传算法可以让你探索政策空间,从第一代的100个随机选择的政策参数开始,迭代地剔除80个最差的执行者,让20个幸存者每人产生4个后代。


或者,您可以在多维参数空间中使用网格搜索:从策略参数的一些看似合理的值开始,您可以通过逐一改变参数值来达到最优设置。


您在这里的性能评价是您最终希望在交易策略中优化的,例如PnL或一些导出量,如投资回报、夏普比率(sharperation)、风险价值、Beta系数等等,参见图5。


独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

图5 PnL和夏普比率用于各种交易策略


防止将参数过度拟合到验证集的一个很好的方法是交叉验证,它使用“向前测试”(WTF:Walk-Forward-Test)来验证您方法的鲁棒性:优化验证段上的策略参数,在验证段之后的数据上及时测试它们,将验证段向前移动,以包含测试数据,重复。这里的基本假设是,最近的过去比更遥远的过去更能衡量未来。


5. 模拟和实盘交易


在您的策略上线之前,冻结所有系统参数和实时测试,就好像实际上是根据您的交易算法的输出来排列您的订单一样。这一重要步骤被称为纸交易,是检验你方法有效性的关键试金石。


你可能会注意到,在你的历史数据中,你实际上使用的值在给定的时间内是不可能达到的,例如计算移动平均值。如果你的策略看起来仍然很有希望,恭喜你——是时候去上线了!虽然您可以从手动下单开始,但不要低估了将您的策略与交易API结合在一起的管理和技术能力。


实际应用中存在的问题


这里展示的典型工作流程有一些严重的缺点:


对于衍生品合约,如基础上的期货,历史数据通常会报告一天的收盘价或选择的时间间隔和结算价格,这是在区间内实现的所有交易中合同的平均价格。但这不大可能是你可以通过购买或卖出订单的价格,根据订单数量的动态不同,在不同的价格/要价水平上有不同的交易量。所以你的模型预测从第2步开始,是指理论价格,但很可能不是你要**的价格。


更详细的建模方法需要考虑到订单簿的实际结构和动态。


开发策略(步骤3)不是基于机器学习的模型的一部分,而是由直觉、经验或简单的启发式指导的手工过程。当模型预测价格上涨时,你会下一个购买订单(“长线”)。


但是你买了多少量?你使用什么置信度阈值?面对不利的市场环境,你能坚持多久?


反馈来得很晚:在你第一次看到你的策略的表现之前,你需要经历第1-3步。


预测模型和策略的参数是独立优化的,即使模型和策略实际上是相互关联的。


在这个框架中探索策略参数的空间是通过低效的数值优化来完成的,而不是通过对预测机器学习模型的强大梯度优化。


强化学习的框架整合了上面的步骤2和步骤3,将交易建模为一个代理(交易者)与环境(市场、订单簿)的交互,通过其操作(下订单)来优化奖励(如返回)。


虽然还处于早期阶段,但最近的研究表明,这是一个值得探索的途径——“需要做进一步的研究”。


后记


参见***,关于“限量及交易”机制的广泛讨论,以及关于欧盟市场框架的更具体信息的***。史密斯,环境经济学(牛津大学出版社,2011),对市场环境政策的历史和影响进行了很好的介绍:


  • 欧盟市场(EU ETS)维基链接:

    https://en.wikipedia.org/wiki/European_Union_Emission_Trading_Scheme


  • 排污权交易(Emissions Trading)维基链接:

    https://en.wikipedia.org/wiki/Emissions_trading


Denny Britz的博客文章更详细地介绍了订单簿的机制,以及算法交易中强化学习方法的前景:


  • Denny Britz’ 博客地址 :

    http://www.wildml.com/2018/02/introduction-to-learning-to-trade-with-reinforcement-learning/

 

原文标题:A Machine Learning framework for Algorithmic trading on Energy markets

原文链接:https://towardsdatascience.com/https-medium-com-skuttruf-machine-learning-in-finance-algorithmic-trading-on-energy-markets-cb68f7471475


译者简介

独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

笪洁琼,中南财大MBA在读,目前研究方向:金融大数据。目前正在学习如何将py等其他软件广泛应用于金融实际操作中,例如抓包预测走势(不会预测股票/虚拟币价格)。可能是金融财务中最懂建筑设计(风水方向)的长腿女生。花式调酒机车冲沙。上赛场里跑过步开过车,商院张掖丝路挑战赛3天徒步78公里。大美山水心欲往,凛冽风雨信步行。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。


点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)

点击“阅读原文”拥抱组织


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
UJXo小妖春日望美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有